package com.gome.ss.core.plugin;

import java.util.List;

import com.gome.ss.core.datapipe.DataPipeInterface;
import com.gome.ss.core.download.SpiderDataMap;
import com.gome.ss.core.download.SpiderRequestInterface;
import com.gome.ss.core.download.SpiderResponseInterface;
import com.gome.ss.core.download.StartRequest;

public interface SpiderPluginInteface {
	
	/**
	 * 只在插件加载时调用一次
	 * @return
	 */
	public boolean init() throws Exception;
	
	/**
	 * 插件卸载时调用
	 * @return
	 */
	public void destory() throws Exception;
	
	/**
	 * 每次开始时调用
	 */
	public void onStart() throws Exception;
	
	/**
	 * 每次开始时调用
	 */
	public boolean onStartWithIncrementalMode() throws Exception;
	
	/**
	 * 每次结束或者被停止时调用
	 */
	public void onStop() throws Exception;
	
	/**
	 * 添加配置信息,主要用于local plugin
	 * @param config
	 */
	public void setConfig(Object config) throws Exception;
	
	/**
	 * 插件通过实现这个函数并在配置中设置startRequest为function，这个函数将被循环调用，直到返回空。
	 * @return
	 */
	public List<StartRequest> getStartRequest() throws Exception;
	
	/**
	 * 在请求去spiderkit集群加载之前调用，返回false将取消加载。
	 * @param request
	 * @return false 取消加载，true 继续加载。
	 * @throws Exception
	 */
	public boolean beforDownLoad(SpiderRequestInterface request) throws Exception;
	
	/**
	 * 请求加载完成后调用
	 * @param response
	 * @throws Exception
	 */
	public void onDownLoadFinished(SpiderResponseInterface response) throws Exception;
	
	/**
	 * 解析页面的链接，返回的链接请求将被加入队列等待加载
	 * @param response
	 * @return
	 * @throws Exception
	 */
	public List<SpiderRequestInterface> parseLink(SpiderResponseInterface response) throws Exception;
	
	/**
	 * 解析页面的数据，返回的数据将被调用DataPipeInterface保存
	 * @param response
	 * @return
	 * @throws Exception
	 */
	public SpiderDataMap parseData(SpiderResponseInterface response) throws Exception;
	
	/**
	 * 获得一个date pipe来保存之前解析出来的数据
	 * @return
	 */
	public DataPipeInterface datePipe() throws Exception;

}
